Angle Calculation

I was pulling the wrong coefficients from the LDA, which is why the angles were in the wrong range last time.

I am now pulling the right coefficients, but not matching the published angles for 9 subjects. I think this is a problem of not having all of the data for subjects that were run multiple times.

All the figures and tables in google slides are updated.

Deploying to tablets

Predicting Weighting Class

Defining the input features

I chose the demographics based on what looked like a hearing test and not an aggregate of some other feature, but picking better demographics is something we should talk about.

No demographic information available for 28, 53, 246, 374, 514, 533, or 555.

Clustering

We did some automatic clustering to define Cue categories based on the weighting angle. The method that showed most consistent values within clusters was a 3-way classification of Temporal, Spectral, Neither.

Ways I played with the algorithm:

  • number clusters
  • distance measures euclidean
  • distance threshold 100
  • variance minimizations ward (minimize in group variance)

Input features:

  • corner, semi-corner and edge accuracy counts (6)
  • all prediction type-response triplets (100)
  • final angle (1)
  • corner, semi-corner, edge, and angle (7)

Measures in red were used in the final clussterer.

Random Forest Classifier

When trained on corner+semi-corner+edge+angle features, perfectly predicts held-out class labels (train/test acc 100%) for full Without angle as input, train acc 0.6 test 0.57

Behavior of the different LSTMs

We have been looking at ways of predicting a coarse-grain category for angles using statistical and neural methods.

Plot the various models.

Base, Step 25

Base, Step 10

The subjects who are taking longer to converge:

Base & Corner, Step 10

Base, Corner, & Predicted LDA, Step 10

The subjects who are taking longer to converge:

Base, Corner, Predicted LDA, & Demographics, Step 10

The subjects who are taking longer to converge:

Base and Corner, Step 5

Base and Corner, Step 1

Base, Co srner, LDA & Demographics, Step 1

LS0tCnRpdGxlOiAiVXBkYXRlcyB0byBDdWUgUHJvZmlsZSBBbmFseXNpcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IsZWNobz1GQUxTRSxyZXN1bHRzPSdoaWRlJyx3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShwYXRjaHdvcmspCmBgYAoKIyMgQW5nbGUgQ2FsY3VsYXRpb24KCkkgd2FzIHB1bGxpbmcgdGhlIHdyb25nIGNvZWZmaWNpZW50cyBmcm9tIHRoZSBMREEsIHdoaWNoIGlzIHdoeSB0aGUgYW5nbGVzIHdlcmUgaW4gdGhlIHdyb25nIHJhbmdlIGxhc3QgdGltZS4gIAoKSSBhbSBub3cgcHVsbGluZyB0aGUgcmlnaHQgY29lZmZpY2llbnRzLCBidXQgbm90IG1hdGNoaW5nIHRoZSBwdWJsaXNoZWQgYW5nbGVzIGZvciA5IHN1YmplY3RzLiAgSSB0aGluayB0aGlzIGlzIGEgcHJvYmxlbSBvZiBub3QgaGF2aW5nIGFsbCBvZiB0aGUgZGF0YSBmb3Igc3ViamVjdHMgdGhhdCB3ZXJlIHJ1biBtdWx0aXBsZSB0aW1lcy4KCkFsbCB0aGUgZmlndXJlcyBhbmQgdGFibGVzIGluIGdvb2dsZSBzbGlkZXMgYXJlIHVwZGF0ZWQuCgojIyBEZXBsb3lpbmcgdG8gdGFibGV0cwoKKiBnb3QgYSB0YWJsZXQgdG8gdGVzdCBvbiBhbmQgdGhpbmdzIGRvd25sb2FkZWQKKiBzdGlsbCBuZWVkIHRvIHRlc3QKCiMgUHJlZGljdGluZyBXZWlnaHRpbmcgQ2xhc3MKCkRlZmluaW5nIHRoZSBpbnB1dCBmZWF0dXJlcwoKKiBfY29ybmVyIGFjY3VyYWN5XzogIGhvdyB3ZWxsIHlvdSBoZWFyZCB0aGUgY29ybmVyIGRhdGEgKGUuZy4gU3RpbXVsaTE9NSwgU3RpbXVsaTI9MSwgeW91IHJlc3BvbmQgJ0JBSCcpCiogX3NlbWktY29ybmVyIGFjY3VyYWN5XzogIGhvdyB3ZWxsIHlvdSBwZXJmb3JtIG9uIHRoZSAiaW5uZXIgcmluZyIgc3RpbXVsaSAoZS5nLiBTdGltdWxpXzE9NCwgU3RpbXVsaV8yPTIsIHlvdSByZXNwb25kICdCQUgnIG9yIFN0aW11bGlfMT00IGFuZCBTdGltdWxpXzI9MSwgeW91IHJlc3BvbmQgJ0JBSCcpCiogX2VkZ2UgYWNjdXJhY3lfOiAgd2hldGhlciBvciBub3QgeW91IHdlcmUgY29ycmVjdCBpbiBhbiB1bmFtYmlndW91cyBkaW1lbnNpb24gKGUuZy4gU3RpbXVsaV8xPTUsIFN0aW11bGlfMj0zLCB5b3UgcmVzcG9uZCAnQkFIJykKKiBfZGVtb2dyYXBoaWNzXzogIFNUTURldGVjdGlvblRocmVzaG9sZEwsIFNUTURldGVjdGlvblRocmVzaG9sZFIsIFNUTVNlbnNpdGl2aXR5TCwgU1RNU2Vuc2l0aXZpdHlSLCBDX1RwcmFjdGljZXJvdW5kcywgQWdlQ1QsIFIzRlBUQSwgTDNGUFRBCgpJIGNob3NlIHRoZSBkZW1vZ3JhcGhpY3MgYmFzZWQgb24gd2hhdCBsb29rZWQgbGlrZSBhIGhlYXJpbmcgdGVzdCBhbmQgbm90IGFuIGFnZ3JlZ2F0ZSBvZiBzb21lIG90aGVyIGZlYXR1cmUsIGJ1dCBwaWNraW5nIGJldHRlciBkZW1vZ3JhcGhpY3MgaXMgc29tZXRoaW5nIHdlIHNob3VsZCB0YWxrIGFib3V0LgoKTm8gZGVtb2dyYXBoaWMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZvciAyOCwgNTMsIDI0NiwgMzc0LCA1MTQsIDUzMywgb3IgNTU1LgoKIyMgQ2x1c3RlcmluZwoKV2UgZGlkIHNvbWUgYXV0b21hdGljIGNsdXN0ZXJpbmcgdG8gZGVmaW5lIEN1ZSBjYXRlZ29yaWVzIGJhc2VkIG9uIHRoZSB3ZWlnaHRpbmcgYW5nbGUuICBUaGUgbWV0aG9kIHRoYXQgc2hvd2VkIG1vc3QgY29uc2lzdGVudCB2YWx1ZXMgd2l0aGluIGNsdXN0ZXJzIHdhcyBhIDMtd2F5IGNsYXNzaWZpY2F0aW9uIG9mIFRlbXBvcmFsLCBTcGVjdHJhbCwgTmVpdGhlci4KCldheXMgSSBwbGF5ZWQgd2l0aCB0aGUgYWxnb3JpdGhtOgoKKiBudW1iZXIgY2x1c3RlcnMKKiBkaXN0YW5jZSBtZWFzdXJlcyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5ldWNsaWRlYW48L3NwYW4+CiogZGlzdGFuY2UgdGhyZXNob2xkIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPjEwMDwvc3Bhbj4KKiB2YXJpYW5jZSBtaW5pbWl6YXRpb25zIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPndhcmQgKG1pbmltaXplIGluIGdyb3VwIHZhcmlhbmNlKTwvc3Bhbj4KCklucHV0IGZlYXR1cmVzOgoKKiBjb3JuZXIsIHNlbWktY29ybmVyIGFuZCBlZGdlIGFjY3VyYWN5IGNvdW50cyAoNikKKiBhbGwgcHJlZGljdGlvbiB0eXBlLXJlc3BvbnNlIHRyaXBsZXRzICgxMDApCiogPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+ZmluYWwgYW5nbGUgKDEpPC9zcGFuPgoqIGNvcm5lciwgc2VtaS1jb3JuZXIsIGVkZ2UsIGFuZCBhbmdsZSAoNykKCk1lYXN1cmVzIGluIHJlZCB3ZXJlIHVzZWQgaW4gdGhlIGZpbmFsIGNsdXNzdGVyZXIuCgojIyBSYW5kb20gRm9yZXN0IENsYXNzaWZpZXIKCldoZW4gdHJhaW5lZCBvbiBjb3JuZXIrc2VtaS1jb3JuZXIrZWRnZSthbmdsZSBmZWF0dXJlcywgcGVyZmVjdGx5IHByZWRpY3RzIGhlbGQtb3V0IGNsYXNzIGxhYmVscyAodHJhaW4vdGVzdCBhY2MgMTAwJSkgZm9yIGZ1bGwKV2l0aG91dCBhbmdsZSBhcyBpbnB1dCwgdHJhaW4gYWNjIDAuNiAgdGVzdCAwLjU3CgojIyBCZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IExTVE1zCgpXZSBoYXZlIGJlZW4gbG9va2luZyBhdCB3YXlzIG9mIHByZWRpY3RpbmcgYSBjb2Fyc2UtZ3JhaW4gY2F0ZWdvcnkgZm9yIGFuZ2xlcyB1c2luZyBzdGF0aXN0aWNhbCBhbmQgbmV1cmFsIG1ldGhvZHMuCgpgYGB7cixlY2hvPUZBTFNFfQojIExTVE0gcmVzdWx0cwpkYXRhLmZyYW1lKCJpbnB1dCBmZWF0cyIgPSBjKCJiYXNlIiwgImJhc2UiLCAiYmFzZSArIGNvcm5lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlICsgY29ybmVyICsgTERBIiwgImJhc2UgKyBjb3JuZXIgKyBMREEgKyBkZW1vZ3JhcGhpY3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZSArIGNvcm5lciIsICJiYXNlICsgY29ybmVyIiksCiAgICAgICAgICAgInN0ZXAgc2l6ZSIgPSBjKDI1LDEwLDEwLDEwLDEwLDUsMSksCiAgICAgICAgICAgInRyYWluIGFjY3VyYWN5IiA9IGMoIjg4JSIsICI4MzAvODM1ICg5OSUpIiwgIjgzNS84MzUgKDEwMCUpIiwgIjgzNS84MzUgKDEwMCUpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgxOS84MzUgKDk4JSkiLCAiMTY0Ny8xNjQ3ICgxMDAlKSIsICI4MTQzLzgxNDMgKDEwMCUpIiksCiAgICAgICAgICAgInRlc3QgYWNjdXJhY3kiID0gYygiOTAlIiwgIjEwMCUiLCAiMTAwJSIsICIxMDAlIiwgIjk5JSIsICIxMDAlIiwgIjEwMCUiKSkKCiMgbG9hZCB0aGUgYW5nbGUgZGF0YSBzbyBpIGNhbiByZWZlciBiYWNrIHRvIGl0CmFuZ2xlX2RhdGEgPSByZWFkLmNzdignL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbmloL2FuZ2xlLnRzdicsc2VwPSdcdCcpCmhhc19kZW1vID0gZnVuY3Rpb24oc3Viail7CiAgaWYgKHN1YmogJWluJSBuby5kZW1vKXsKICAgIHJldHVybigiVFJVRSIpCiAgfSBlbHNlIHsKICAgIHJldHVybigiRkFMU0UiKQogIH0KfQpuby5kZW1vIDwtIGMoMjgsIDUzLCAyNDYsIDM3NCwgNTE0LCA1MzMsIDU1NSkKYW5nbGVfZGF0YSRNaXNzaW5nLkRlbW8gPC0gdW5saXN0KGxhcHBseShhbmdsZV9kYXRhJFN1YmosaGFzX2RlbW8pKQpgYGAKCmBgYHtyLGVjaG89RkFMU0V9Cm1ha2VfaW5kZXggPC0gZnVuY3Rpb24oaW5kKXsKICAgIHJldHVybihhcy5udW1lcmljKHN1YnN0cihpbmQsMixuY2hhcihhcy5jaGFyYWN0ZXIoaW5kKSkpKSkKICB9CnB1bGxfdGFibGUgPC0gZnVuY3Rpb24ocGF0aCl7CiAgZGF0YSA8LSByZWFkLmNzdihwYXRoKQogIGRhdGEgPC0gY2JpbmQoZGF0YVsxXSxzdGFjayhkYXRhWzI6bmNvbChkYXRhKV0pKQogIGRhdGEkaW5kID0gbGFwcGx5KGRhdGEkaW5kLG1ha2VfaW5kZXgpCiAgcmV0dXJuKGFzLmRhdGEuZnJhbWUobGFwcGx5KGRhdGEsdW5saXN0KSkpCn0KYGBgCgpQbG90IHRoZSB2YXJpb3VzIG1vZGVscy4KYGBge3IsIGVjaG89RkFMU0V9CmdldFBhbGV0dGUgPC0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDgsICJTZXQyIikpCm1ha2VfcGxvdCA9IGZ1bmN0aW9uKGRhdGEseWxhYj0nUHJvYmFiaWxpdHkgb2YgY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UgKyBDb3JuZXJzLCBTdGVwIDEwJyl7CiAgcCA8LSBnZ3Bsb3QoZGF0YT1kYXRhLCBhZXMoeD1pbmQsIHk9dmFsdWVzLGNvbG9yPWFzLmZhY3RvcihzdWJqKSkpICsKICAgIGdlb21fbGluZSgpICsKICAgIGdlb21fcG9pbnQoKSsKICAgIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lPSdTdWJqZWN0Jyx2YWx1ZXMgPSBnZXRQYWxldHRlKDI5KSkrCiAgICBzY2FsZV94X2Rpc2NyZXRlKG5hbWU9J051bWJlciBvZiB0cmlhbHMgaW4gdGVzdCBzZXF1ZW5jZScpKwogICAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9eWxhYikrCiAgICBnZ3RpdGxlKHRpdGxlKQogIHJldHVybihnZ3Bsb3RseShwKSkKfQpgYGAKCiMjIEJhc2UsIFN0ZXAgMjUKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Jhc2VfMjVfcm5uX3Byb2JzLmNzdicKYmFkX3Byb2JzIDwtICcvVXNlcnMvc2FyYS9Eb2N1bWVudHMvcmVzZWFyY2gvbmloL2NvbXBhcmluZy1lcnJvci1yYXRlcy9sc3RtX3Jlc3VsdHMvYmFzZV8yNV9ybm5fYmFkX3Byb2JzLmNzdicKZ29vZF9kYXRhIDwtIHB1bGxfdGFibGUoZ29vZF9wcm9icykKYmFkX2RhdGEgPC0gcHVsbF90YWJsZShiYWRfcHJvYnMpCm1ha2VfcGxvdChnb29kX2RhdGEsdGl0bGU9J0Jhc2UsIFN0ZXAgMjUnKSAKbWFrZV9wbG90KGJhZF9kYXRhLHlsYWI9J0hpZ2hlc3QgUHJvYmFiaWxpdHkgb2YgaW5jb3JyZWN0IGNsYXNzJyx0aXRsZT0nQmFzZSwgU3RlcCAyNScpCmBgYAoKIyMgQmFzZSwgU3RlcCAxMApgYGB7cixlY2hvPUZBTFNFfQpnb29kX3Byb2JzIDwtICcvVXNlcnMvc2FyYS9Eb2N1bWVudHMvcmVzZWFyY2gvbmloL2NvbXBhcmluZy1lcnJvci1yYXRlcy9sc3RtX3Jlc3VsdHMvYmFzZV8xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9iYXNlXzEwX3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSwgU3RlcCAxMCcpIAptYWtlX3Bsb3QoYmFkX2RhdGEseWxhYj0nSGlnaGVzdCBQcm9iYWJpbGl0eSBvZiBpbmNvcnJlY3QgY2xhc3MnLHRpdGxlPSdCYXNlLCBTdGVwIDEwJykKYGBgClRoZSBzdWJqZWN0cyB3aG8gYXJlIHRha2luZyBsb25nZXIgdG8gY29udmVyZ2U6CmBgYHtyLGVjaG89RkFMU0V9CmJhZF9zdWJqZWN0cyA9IGMoNTM2LDUyNSw1MzcsNTU2LDUyOSkKZmlsdGVyKGFuZ2xlX2RhdGEsU3ViaiAlaW4lIGJhZF9zdWJqZWN0cykKYGBgCgojIyBCYXNlICYgQ29ybmVyLCBTdGVwIDEwCgpgYGB7cixlY2hvPUZBTFNFfQpnb29kX3Byb2JzIDwtICcvVXNlcnMvc2FyYS9Eb2N1bWVudHMvcmVzZWFyY2gvbmloL2NvbXBhcmluZy1lcnJvci1yYXRlcy9sc3RtX3Jlc3VsdHMvY29ybmVyc18xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJzXzEwX3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSAmIENvcm5lciwgU3RlcCAxMCcpIAptYWtlX3Bsb3QoYmFkX2RhdGEseWxhYj0nSGlnaGVzdCBQcm9iYWJpbGl0eSBvZiBpbmNvcnJlY3QgY2xhc3MnLHRpdGxlPSdCYXNlICYgQ29ybmVyLCBTdGVwIDEwJykKYGBgCgojIyBCYXNlLCBDb3JuZXIsICYgUHJlZGljdGVkIExEQSwgU3RlcCAxMAoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcnNfYW5kX2xkYV8xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJzX2FuZF9sZGFfMTBfcm5uX2JhZF9wcm9icy5jc3YnCmdvb2RfZGF0YSA8LSBwdWxsX3RhYmxlKGdvb2RfcHJvYnMpCmJhZF9kYXRhIDwtIHB1bGxfdGFibGUoYmFkX3Byb2JzKQptYWtlX3Bsb3QoZ29vZF9kYXRhLHRpdGxlPSdCYXNlLCBDb3JuZXIgJiBMREEsIFN0ZXAgMTAnKSAKbWFrZV9wbG90KGJhZF9kYXRhLHlsYWI9J0hpZ2hlc3QgUHJvYmFiaWxpdHkgb2YgaW5jb3JyZWN0IGNsYXNzJyx0aXRsZT0nQmFzZSwgQ29ybmVyICYgTERBLCBTdGVwIDEwJykKYGBgClRoZSBzdWJqZWN0cyB3aG8gYXJlIHRha2luZyBsb25nZXIgdG8gY29udmVyZ2U6CmBgYHtyLGVjaG89RkFMU0V9CmJhZF9zdWJqZWN0cyA9IGMoNTcxLDU0Miw1Miw0Nyw1MTYsNTEwKQpmaWx0ZXIoYW5nbGVfZGF0YSxTdWJqICVpbiUgYmFkX3N1YmplY3RzKQpgYGAKIyMgQmFzZSwgQ29ybmVyLCBQcmVkaWN0ZWQgTERBLCAmIERlbW9ncmFwaGljcywgU3RlcCAxMAoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl9sZGFfZGVtb18xMF9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJfbGRhX2RlbW9fMTBfcm5uX2JhZF9wcm9icy5jc3YnCmdvb2RfZGF0YSA8LSBwdWxsX3RhYmxlKGdvb2RfcHJvYnMpCmJhZF9kYXRhIDwtIHB1bGxfdGFibGUoYmFkX3Byb2JzKQptYWtlX3Bsb3QoZ29vZF9kYXRhLHRpdGxlPSdCYXNlLCBDb3JuZXIsIExEQSwgRGVtb2dyYXBoaWNzLCBTdGVwIDEwJykgCm1ha2VfcGxvdChiYWRfZGF0YSx5bGFiPSdIaWdoZXN0IFByb2JhYmlsaXR5IG9mIGluY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UsIENvcm5lciwgTERBLCBEZW1vZ3JhcGhpY3MsIFN0ZXAgMTAnKQoKYGBgClRoZSBzdWJqZWN0cyB3aG8gYXJlIHRha2luZyBsb25nZXIgdG8gY29udmVyZ2U6CmBgYHtyLGVjaG89RkFMU0V9CmJhZF9zdWJqZWN0cyA9IGMoMjcyLDQ3LDUzNyw1NzYsNTEwLDUyNSw1NDIpCmZpbHRlcihhbmdsZV9kYXRhLFN1YmogJWluJSBiYWRfc3ViamVjdHMpCmBgYAojIyBCYXNlIGFuZCBDb3JuZXIsIFN0ZXAgNQoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl81X3Jubl9wcm9icy5jc3YnCmJhZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl81X3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSAmIENvcm5lciwgU3RlcCA1JykgCm1ha2VfcGxvdChiYWRfZGF0YSx5bGFiPSdIaWdoZXN0IFByb2JhYmlsaXR5IG9mIGluY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UgJiBDb3JuZXIsIFN0ZXAgNScpCmBgYAoKIyMgQmFzZSBhbmQgQ29ybmVyLCBTdGVwIDEKCmBgYHtyLGVjaG89RkFMU0V9Cmdvb2RfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJfMV9ybm5fcHJvYnMuY3N2JwpiYWRfcHJvYnMgPC0gJy9Vc2Vycy9zYXJhL0RvY3VtZW50cy9yZXNlYXJjaC9uaWgvY29tcGFyaW5nLWVycm9yLXJhdGVzL2xzdG1fcmVzdWx0cy9jb3JuZXJfMV9ybm5fYmFkX3Byb2JzLmNzdicKZ29vZF9kYXRhIDwtIHB1bGxfdGFibGUoZ29vZF9wcm9icykKYmFkX2RhdGEgPC0gcHVsbF90YWJsZShiYWRfcHJvYnMpCm1ha2VfcGxvdChnb29kX2RhdGEsdGl0bGU9J0Jhc2UgJiBDb3JuZXIsIFN0ZXAgMScpIAptYWtlX3Bsb3QoYmFkX2RhdGEseWxhYj0nSGlnaGVzdCBQcm9iYWJpbGl0eSBvZiBpbmNvcnJlY3QgY2xhc3MnLHRpdGxlPSdCYXNlICYgQ29ybmVyLCBTdGVwIDEnKQpgYGAKCgojIEJhc2UsIENvIHNybmVyLCBMREEgJiBEZW1vZ3JhcGhpY3MsIFN0ZXAgMQoKYGBge3IsZWNobz1GQUxTRX0KZ29vZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl9sZGFfZGVtb18xX3Jubl9wcm9icy5jc3YnCmJhZF9wcm9icyA8LSAnL1VzZXJzL3NhcmEvRG9jdW1lbnRzL3Jlc2VhcmNoL25paC9jb21wYXJpbmctZXJyb3ItcmF0ZXMvbHN0bV9yZXN1bHRzL2Nvcm5lcl9sZGFfZGVtb18xX3Jubl9iYWRfcHJvYnMuY3N2Jwpnb29kX2RhdGEgPC0gcHVsbF90YWJsZShnb29kX3Byb2JzKQpiYWRfZGF0YSA8LSBwdWxsX3RhYmxlKGJhZF9wcm9icykKbWFrZV9wbG90KGdvb2RfZGF0YSx0aXRsZT0nQmFzZSwgQ29ybmVyLCBMREEsIERlbW9ncmFwaGljcywgU3RlcCAxJykgCm1ha2VfcGxvdChiYWRfZGF0YSx5bGFiPSdIaWdoZXN0IFByb2JhYmlsaXR5IG9mIGluY29ycmVjdCBjbGFzcycsdGl0bGU9J0Jhc2UsIENvcm5lciwgTERBLCBEZW1vZ3JhcGhpY3MsIFN0ZXAgMScpCgpgYGA=